Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / desktopApp / src / main / kotlin / org / meshtastic / desktop / notification / MacOSNotificationSender.kt

Displaying Raw • Download

desktopApp/src/main/kotlin/org/meshtastic/desktop/notification/MacOSNotificationSender.kt fix/qr-error-correction (7b45f84f) Text, 8.15 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.desktop.notification

Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787com.sun.jna.Function
Tff7b72import T7ee787com.sun.jna.NativeLibrary
Tff7b72import T7ee787com.sun.jna.Pointer
Tff7b72import T7ee787org.meshtastic.core.repository.Notification
Tff7b72import T7ee787java.util.UUID

T8b949e/**
* Sends notifications through macOS UserNotifications (`UNUserNotificationCenter`) via JNA + Objective-C runtime. This
* ensures notifications are attributed to the app bundle instead of Script Editor.
*/
Tff7b72class T56d364MacOSNotificationSender Te6edf3private Tff7b72constructorTb4b4b4(Tff7b72private Tff7b72val Te6edf3bridgeTb4b4b4: Te6edf3MacNotificationBridgeTb4b4b4) Tb4b4b4:
Te6edf3NativeNotificationSender Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4: Tff7b72thisTb4b4b4(Te6edf3JnaMacNotificationBridgeTb4b4b4(Tb4b4b4)Tb4b4b4)

Te6edf3internal Tff7b72constructorTb4b4b4(Te6edf3bridgeTb4b4b4: Te6edf3MacNotificationBridgeTb4b4b4, Te6edf3unusedTb4b4b4: Tffa657Unit Tff7b72= Tffa657UnitTb4b4b4) Tb4b4b4: Tff7b72thisTb4b4b4(Te6edf3bridgeTb4b4b4)

Tf0883e@Volatile Tff7b72private Tff7b72var Te6edf3authorizationRequested Tff7b72= Tff7b72false

Tff7b72override Tff7b72fun Td2a8ffsendTb4b4b4(Te6edf3notificationTb4b4b4: Te6edf3NotificationTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3bridgeTb4b4b4.Te6edf3isAvailableTb4b4b4) Tff7b72return Tff7b72false

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3authorizationRequestedTb4b4b4) Tb4b4b4{
Te6edf3synchronizedTb4b4b4(Tff7b72thisTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3authorizationRequestedTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3authOk Tff7b72= Te6edf3bridgeTb4b4b4.Te6edf3requestAuthorizationTb4b4b4(Te6edf3DEFAULT_AUTHORIZATION_OPTIONSTb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3authOkTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3w Tb4b4b4{ Ta5d6ff"Ta5d6ffUNUserNotificationCenter authorization request failedTa5d6ff" Tb4b4b4}
Tb4b4b4}
Te6edf3authorizationRequested Tff7b72= Tff7b72true
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72return Te6edf3bridgeTb4b4b4.Te6edf3postTb4b4b4(
Te6edf3title Tff7b72= Te6edf3notificationTb4b4b4.Te6edf3titleTb4b4b4,
Te6edf3message Tff7b72= Te6edf3notificationTb4b4b4.Te6edf3messageTb4b4b4,
Te6edf3subtitle Tff7b72= Te6edf3categorySubtitleTb4b4b4(Te6edf3notificationTb4b4b4.Te6edf3categoryTb4b4b4)Tb4b4b4,
Te6edf3playSound Tff7b72= Tff7b72!Te6edf3notificationTb4b4b4.Te6edf3isSilentTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72internal Tff7b72fun Td2a8ffcategorySubtitleTb4b4b4(Te6edf3categoryTb4b4b4: Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72when Tb4b4b4(Te6edf3categoryTb4b4b4) Tb4b4b4{
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3Message Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffMessageTa5d6ff"
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3NodeEvent Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffNode EventTa5d6ff"
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3MeshBeacon Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffMesh InvitationTa5d6ff"
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3Battery Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffLow BatteryTa5d6ff"
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3Alert Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffAlertTa5d6ff"
Te6edf3NotificationTb4b4b4.Te6edf3CategoryTb4b4b4.Te6edf3Service Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffServiceTa5d6ff"
Tb4b4b4}

Tff7b72companion Tff7b72object Tb4b4b4{
T8b949e// UNAuthorizationOptions: badge(1 << 0), sound(1 << 1), alert(1 << 2)
Tff7b72internal Tff7b72const Tff7b72val Te6edf3DEFAULT_AUTHORIZATION_OPTIONS Tff7b72= T79c0ff0Te6edf3b111L
Tb4b4b4}
Tb4b4b4}

Tff7b72internal Tff7b72interface T56d364MacNotificationBridge Tb4b4b4{
Tff7b72val Te6edf3isAvailableTb4b4b4: Tffa657Boolean

Tff7b72fun Td2a8ffrequestAuthorizationTb4b4b4(Te6edf3optionsTb4b4b4: Tffa657LongTb4b4b4)Tb4b4b4: Tffa657Boolean

Tff7b72fun Td2a8ffpostTb4b4b4(Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4, Te6edf3messageTb4b4b4: Tffa657StringTb4b4b4, Te6edf3subtitleTb4b4b4: Tffa657StringTb4b4b4, Te6edf3playSoundTb4b4b4: Tffa657BooleanTb4b4b4)Tb4b4b4: Tffa657Boolean
Tb4b4b4}

Tff7b72private Tff7b72class T56d364JnaMacNotificationBridge Tb4b4b4: Te6edf3MacNotificationBridge Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3objcTb4b4b4: Te6edf3NativeLibrary?
Tff7b72private Tff7b72val Te6edf3objcGetClassTb4b4b4: Te6edf3Function?
Tff7b72private Tff7b72val Te6edf3selRegisterNameTb4b4b4: Te6edf3Function?
Tff7b72private Tff7b72val Te6edf3objcMsgSendTb4b4b4: Te6edf3Function?

Tff7b72init Tb4b4b4{
Tff7b72val Te6edf3loaded Tff7b72=
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isMacOsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3LoadedBridgeTb4b4b4(Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3NativeLibraryTb4b4b4.Te6edf3getInstanceTb4b4b4(Ta5d6ff"Ta5d6ffUserNotificationsTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3nativeObjc Tff7b72= Te6edf3NativeLibraryTb4b4b4.Te6edf3getInstanceTb4b4b4(Ta5d6ff"Ta5d6ffobjcTa5d6ff"Tb4b4b4)
Te6edf3LoadedBridgeTb4b4b4(
Te6edf3objc Tff7b72= Te6edf3nativeObjcTb4b4b4,
Te6edf3objcGetClass Tff7b72= Te6edf3nativeObjcTb4b4b4.Te6edf3getFunctionTb4b4b4(Ta5d6ff"Ta5d6ffobjc_getClassTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3selRegisterName Tff7b72= Te6edf3nativeObjcTb4b4b4.Te6edf3getFunctionTb4b4b4(Ta5d6ff"Ta5d6ffsel_registerNameTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3objcMsgSend Tff7b72= Te6edf3nativeObjcTb4b4b4.Te6edf3getFunctionTb4b4b4(Ta5d6ff"Ta5d6ffobjc_msgSendTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3UnsatisfiedLinkErrorTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to initialize macOS notification bridgeTa5d6ff" Tb4b4b4}
Te6edf3LoadedBridgeTb4b4b4(Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3SecurityExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to initialize macOS notification bridgeTa5d6ff" Tb4b4b4}
Te6edf3LoadedBridgeTb4b4b4(Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4, Tff7b72nullTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3objc Tff7b72= Te6edf3loadedTb4b4b4.Te6edf3objc
Te6edf3objcGetClass Tff7b72= Te6edf3loadedTb4b4b4.Te6edf3objcGetClass
Te6edf3selRegisterName Tff7b72= Te6edf3loadedTb4b4b4.Te6edf3selRegisterName
Te6edf3objcMsgSend Tff7b72= Te6edf3loadedTb4b4b4.Te6edf3objcMsgSend
Tb4b4b4}

Tff7b72override Tff7b72val Te6edf3isAvailableTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3objc Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3objcGetClass Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3selRegisterName Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3objcMsgSend Tff7b72!Tff7b72= Tff7b72null

Tff7b72override Tff7b72fun Td2a8ffrequestAuthorizationTb4b4b4(Te6edf3optionsTb4b4b4: Tffa657LongTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3runCatching Tb4b4b4{
Tff7b72val Te6edf3centerClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffUNUserNotificationCenterTa5d6ff"Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Tff7b72val Te6edf3center Tff7b72= Te6edf3msgTb4b4b4(Te6edf3centerClassTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffcurrentNotificationCenterTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Te6edf3msgTb4b4b4(Te6edf3centerTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffrequestAuthorizationWithOptions:completionHandler:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3optionsTb4b4b4, Te6edf3PointerTb4b4b4.Te6edf3NULLTb4b4b4)
Tff7b72true
Tb4b4b4}
Tb4b4b4.Te6edf3getOrElse Tb4b4b4{ Te6edf3e Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to request UNUserNotificationCenter authorizationTa5d6ff" Tb4b4b4}
Tff7b72false
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffpostTb4b4b4(Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4, Te6edf3messageTb4b4b4: Tffa657StringTb4b4b4, Te6edf3subtitleTb4b4b4: Tffa657StringTb4b4b4, Te6edf3playSoundTb4b4b4: Tffa657BooleanTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3runCatching Tb4b4b4{
Tff7b72val Te6edf3contentClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffUNMutableNotificationContentTa5d6ff"Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Tff7b72val Te6edf3requestClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffUNNotificationRequestTa5d6ff"Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Tff7b72val Te6edf3centerClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffUNUserNotificationCenterTa5d6ff"Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false

Tff7b72val Te6edf3content Tff7b72= Te6edf3msgTb4b4b4(Te6edf3msgTb4b4b4(Te6edf3contentClassTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffallocTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffinitTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Te6edf3msgTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffsetTitle:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3nsStringTb4b4b4(Te6edf3titleTb4b4b4) Tff7b72?: Tff7b72return Tff7b72falseTb4b4b4)
Te6edf3msgTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffsetBody:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3nsStringTb4b4b4(Te6edf3messageTb4b4b4) Tff7b72?: Tff7b72return Tff7b72falseTb4b4b4)
Te6edf3msgTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffsetSubtitle:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3nsStringTb4b4b4(Te6edf3subtitleTb4b4b4) Tff7b72?: Tff7b72return Tff7b72falseTb4b4b4)

Tff7b72if Tb4b4b4(Te6edf3playSoundTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3soundClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffUNNotificationSoundTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3defaultSound Tff7b72= Te6edf3soundClassTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3msgTb4b4b4(Tffa657itTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffdefaultSoundTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3defaultSound Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3msgTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffsetSound:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3defaultSoundTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72val Te6edf3request Tff7b72=
Te6edf3msgTb4b4b4(
Te6edf3requestClassTb4b4b4,
Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffrequestWithIdentifier:content:trigger:Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3nsStringTb4b4b4(Te6edf3UUIDTb4b4b4.Te6edf3randomUUIDTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72falseTb4b4b4,
Te6edf3contentTb4b4b4,
Te6edf3PointerTb4b4b4.Te6edf3NULLTb4b4b4,
Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false

Tff7b72val Te6edf3center Tff7b72= Te6edf3msgTb4b4b4(Te6edf3centerClassTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffcurrentNotificationCenterTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72false
Te6edf3msgTb4b4b4(Te6edf3centerTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffaddNotificationRequest:withCompletionHandler:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3requestTb4b4b4, Te6edf3PointerTb4b4b4.Te6edf3NULLTb4b4b4)
Tff7b72true
Tb4b4b4}
Tb4b4b4.Te6edf3getOrElse Tb4b4b4{ Te6edf3e Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to post macOS notificationTa5d6ff" Tb4b4b4}
Tff7b72false
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffclassRefTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3Pointer? Tff7b72= Te6edf3objcGetClassTff7b72?.Te6edf3invokeTb4b4b4(Te6edf3PointerTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4, Te6edf3arrayOfTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72as? Te6edf3Pointer

Tff7b72private Tff7b72fun Td2a8ffselectorTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3Pointer Tff7b72=
Te6edf3selRegisterNameTff7b72?.Te6edf3invokeTb4b4b4(Te6edf3PointerTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4, Te6edf3arrayOfTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72as? Te6edf3Pointer
Tff7b72?: Te6edf3errorTb4b4b4(Ta5d6ff"Ta5d6ffUnable to resolve selector 'Tffd700$Te6edf3nameTa5d6ff'Ta5d6ff"Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffnsStringTb4b4b4(Te6edf3valueTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3Pointer? Tb4b4b4{
Tff7b72val Te6edf3nsStringClass Tff7b72= Te6edf3classRefTb4b4b4(Ta5d6ff"Ta5d6ffNSStringTa5d6ff"Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72null
Tff7b72return Te6edf3msgTb4b4b4(Te6edf3nsStringClassTb4b4b4, Te6edf3selectorTb4b4b4(Ta5d6ff"Ta5d6ffstringWithUTF8String:Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3valueTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmsgTb4b4b4(Te6edf3receiverTb4b4b4: Te6edf3Pointer?Tb4b4b4, Te6edf3selectorTb4b4b4: Te6edf3PointerTb4b4b4, Tff7b72vararg Te6edf3argsTb4b4b4: Tffa657Any?Tb4b4b4)Tb4b4b4: Te6edf3Pointer? Tb4b4b4{
Tff7b72val Te6edf3function Tff7b72= Te6edf3objcMsgSend
Tff7b72val Te6edf3target Tff7b72= Te6edf3receiver
Tff7b72if Tb4b4b4(Te6edf3function Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3target Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tff7b72return Tff7b72null
Tff7b72val Te6edf3callArgs Tff7b72= Te6edf3arrayOfNullsTff7b72<Tffa657AnyTff7b72>Tb4b4b4(Te6edf3argsTb4b4b4.Te6edf3size Tff7b72+ T79c0ff2Tb4b4b4)
Te6edf3callArgsTff7b72[T79c0ff0Tff7b72] Tff7b72= Te6edf3target
Te6edf3callArgsTff7b72[T79c0ff1Tff7b72] Tff7b72= Te6edf3selector
Te6edf3argsTb4b4b4.Te6edf3copyIntoTb4b4b4(Te6edf3callArgsTb4b4b4, Te6edf3destinationOffset Tff7b72= T79c0ff2Tb4b4b4)
Tff7b72return Te6edf3functionTb4b4b4.Te6edf3invokeTb4b4b4(Te6edf3PointerTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4, Te6edf3callArgsTb4b4b4) Tff7b72as? Te6edf3Pointer
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffisMacOsTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72=
Te6edf3SystemTb4b4b4.Te6edf3getPropertyTb4b4b4(Ta5d6ff"Ta5d6ffos.nameTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3let Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffmacTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72| Tffa657itTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffdarwinTa5d6ff"Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72data Tff7b72class T56d364LoadedBridgeTb4b4b4(
Tff7b72val Te6edf3objcTb4b4b4: Te6edf3NativeLibrary?Tb4b4b4,
Tff7b72val Te6edf3objcGetClassTb4b4b4: Te6edf3Function?Tb4b4b4,
Tff7b72val Te6edf3selRegisterNameTb4b4b4: Te6edf3Function?Tb4b4b4,
Tff7b72val Te6edf3objcMsgSendTb4b4b4: Te6edf3Function?Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.09s